<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>闭包的作用</title>
</head>

<body>
  <script>
    // 闭包( closure ) 指有权访问另一个函数作用域中变量的函数 函数 函数!!!
    // 简单理解就是一个函数作用域可以访问另外一个函数作用域内的局部变量
    function fn() {
      // 函数boy~
      var num = 10;

      // function fun() {
      //   console.log("[fun] 我是fn函数的num的值", num);
      // }
      // fun();
      // return fun;

      // 精简写法: 实现闭包
      // 闭包作用: 延伸了变量的作用范围
      return function () {
        console.log(num);
      }
    }

    // fn函数内部将fun作为参数返回，所以可以使用外部函数f接收
    // f接收了参数后调用，相当于完成外部函数f访问了fn内部函数的作用域的局部变量
    var f = fn();
    f()
    // 类似于
    // var f = function fun() {
    //     console.log("[fun] 我是fn函数的num的值", num);
    //   }
  </script>
</body>

</html>